cuando ejecuto un .net exe, se crea una carpeta correspondiente C:\Users\UserName\AppData\Local\AppName
dentro de esta carpeta, se crea otra carpeta AppName_Url_ABCXYZ
dentro de esta carpeta, se crea otra carpeta para la versión ensamblada de .net exe 0.2.28.0
¿Alguien puede explicar cómo Windows decide crear la carpeta de segundo nivel AppName_Url_ABCXYZ ?
tengo un problema cuando incremento mi versión de ensamblado y realizo una publicación de un solo archivo y ejecuto el exe resultante, se crea una nueva carpeta AppName_Url_ABCXYZ que contiene la nueva carpeta de versión de ensamblado.
esto causa problemas porque interrumpe la funcionalidad de Properties.Settings.Default.Upgrade() ya que la configuración para actualizar ya no está en el directorio esperado
Bien:
-AppData -Local -MyApp -MyApp_Url_ABCXYZ -0.2.13.0 -0.2.14.0 -0.2.15.0Malo:
-AppData -Local -MyApp -MyApp_Url_ABC1 -0.2.13.0 -MyApp_Url_ABC2 -0.2.14.0 -MyApp_Url_ABC3 -0.2.15.0Actualizar:
La información proporcionada por @Richard Deeming indica que la parte hash de la carpeta appdata se genera así:
var uri = "file:///" + fullExePath; //or 'assemblyName.CodeBase' if vshost (you can check the 'FriendlyName') uri = uri.ToUpperInvariant(); var ms = new MemoryStream(); var bSer = new BinaryFormatter(); bSer.Serialize(ms, uri); ms.Position = 0; var sha1 = new SHA1CryptoServiceProvider(); var hash = sha1.ComputeHash(ms); var hashstring = ToBase32StringSuitableForDirName(hash);lo que no tiene sentido ya que la ruta exe no está cambiando
este problema no ocurre con una nueva aplicación WPF .net 6 e incrementando la versión de ensamblaje, por lo que es algo específico de mi aplicación.
examinar los exe resultantes en el explorador de Windows no ayuda, parecen idénticos.
Actualizar:
No he podido determinar por qué ocurre esto en mi proyecto. Ni siquiera sé cómo depurarlo. Nunca he realizado ningún cambio intencional en este comportamiento.
Descargue el paquete completo del proyecto aquí: ConsoleApp1.zip
Para demostrarlo, creemos una aplicación de consola simple:
y agregale un enlace:
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.0" />También agregaremos el archivo de propiedades del proyecto Settings.settings. Como resultado, obtenemos un proyecto con la siguiente configuración:
Después de compilar en modo de depuración y ejecutar el resultado de ConsoleApp1.exe, obtenemos la siguiente imagen en la ruta C:\Users\Administrator\AppData\Local\ConsoleApp1:
dentro de esta carpeta habrá una carpeta con el número de versión del programa:
Al compilar la versión de lanzamiento y ejecutar el resultado de ConsoleApp1.exe, obtenemos la siguiente imagen en la ruta C:\Users\Administrator\AppData\Local\ConsoleApp1:
dentro de esta nueva carpeta también habrá una carpeta con el número de versión del programa:
Cabe señalar que las versiones de depuración y lanzamiento del programa crean carpetas diferentes.
Cuando cambie la versión del proyecto, aparecerán nuevas versiones en las carpetas de depuración y lanzamiento, respectivamente:
Los programas de depuración y lanzamiento son "versiones" de compilación diferentes del mismo proyecto, y se crean URL diferentes para separarlos.
Descargue el paquete completo del proyecto aquí: ConsoleApp1.zip